
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>kafka中消费者组 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>kafka中消费者组 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">Kafka 消费者组的核心定义是什么？它主要为了解决什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">消费者组是 Kafka 中用于组织和管理消费者实例的一种机制，它将多个消费者实例组织成一个逻辑上的消费单元。其主要目的是实现高吞öt量和水平扩展的分布式消息处理，解决单个消费者无法处理大规模数据流的问题。</div>
          </div>
          <div class="card-source">来源: 消费者组的定义</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在消费者组中，“消费者组协调器”（Group Coordinator）扮演着什么角色？它的主要职责有哪些？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">协调器是每个消费者组的专门管理者。其主要职责包括：1. 监控消费者实例的加入和离开，并触发分区重新分配；2. 根据订阅信息和分区状态，决定将哪些分区分配给每个消费者；3. 负责追踪和提交每个消费者实例的消费偏移量（offset）。</div>
          </div>
          <div class="card-source">来源: 消费者组的工作原理 -> 2. 消费者组协调器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">什么是消费者组的“重平衡”（Rebalancing）？通常由哪些事件触发？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">重平衡是指当消费者实例加入或离开消费者组时，协调器触发的分区重新分配过程。触发条件主要包括：有新的消费者实例加入、现有的消费者实例离开或发生宕机。</div>
          </div>
          <div class="card-source">来源: 消费者组的工作原理 -> 4. 消费者组的重平衡</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">消费者组是如何实现容错和高可用性的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当消费者组中的某个消费者实例宕机或失效时，Kafka 会通过协调器重新分配该实例负责的分区给组内其他健康的消费者。这种故障转移机制确保了即使部分节点失效，系统仍能继续运行，从而保证了消息处理的连续性。</div>
          </div>
          <div class="card-source">来源: 消费者组的作用 -> 4. 容错和高可用性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">消费者组如何保证消息的顺序性和一致性，避免重复消费？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">消费者组通过管理每个消费者实例的消费偏移量（offset）来确保每条消息被精确处理一次，避免重复消费。同时，它能保证在同一个分区内，消息被处理的顺序与它们被发送到 Kafka 的顺序一致，从而保障了消息的顺序性。</div>
          </div>
          <div class="card-source">来源: 消费者组的作用 -> 3. 实现消息的顺序性和一致性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">配置</div>
          <div class="card-question">在配置 Kafka 消费者时，`auto.offset.reset` 参数的作用是什么？它有哪些常见的设置值？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">配置</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该参数用于指定当消费者初次加入消费者组或其消费位移丢失时，应从哪里开始消费。常见的设置值包括 `earliest`（从分区的最早可用消息开始消费）和 `latest`（从分区最新的消息开始消费）。</div>
          </div>
          <div class="card-source">来源: 消费者组的配置和管理 -> 1. 消费者组的配置参数</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">请描述 Kafka 消费者组最常见的消费模式——“平衡消费模式”的工作方式。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在平衡消费模式下，消费者组协调器（Consumer Group Coordinator）会动态地将主题的分区分配给组内的消费者实例，以实现负载均衡。协调器还负责监控消费者健康状态，并在消费者加入或离开时重新分配分区，确保每个消费者负责的分区数大致相等。</div>
          </div>
          <div class="card-source">来源: 消费者组的消费模式 -> 1. 平衡消费模式（Balanced Consumer Mode）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">在什么特定场景下，使用“独占消费模式”比“平衡消费模式”更合适？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当需要精确控制消息处理顺序，或者要保证某个分区只被一个特定的消费者实例消费时，独占消费模式更为合适。例如，在订单处理系统或需要强一致性保证的应用中，可以通过手动指定消费分区来避免同一消息被多个实例处理。</div>
          </div>
          <div class="card-source">来源: 消费者组的消费模式 -> 2. 独占消费模式（Exclusive Consumer Mode）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">概括一下使用 Kafka 消费者组带来的主要优势有哪些？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要优势包括：1. 高吞吐量：通过并行处理不同分区的消息提升处理速度；2. 水平扩展：通过增减消费者实例数量来应对负载变化；3. 容错性：某个实例故障时，其工作负载会自动转移给其他实例；4. 灵活性和实时性：可根据业务需求实时调整消费者策略；5. 保证消息顺序性：保证同一分区内的消息按序处理。</div>
          </div>
          <div class="card-source">来源: 消费者组的特性和优势 -> 2. 优势</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
